package com.tools.module.app.util;

import com.baidu.aip.speech.AipSpeech;
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;


/**
 *
 */
@Component
@Configuration
@EnableConfigurationProperties({QnYunProperties.class})
public class QiNiuUtils {

    private QnYunProperties qnYunProperties;

    public QiNiuUtils(QnYunProperties qnYunProperties) {
        this.qnYunProperties = qnYunProperties;
    }

    private AipSpeech instance;

    //密钥配置
    Auth auth = Auth.create("bGSX_KFjFXnwbTTv13ivxtb9xxd_Rk0qd0vGMQLW","3tM6v7B40U6thA-D792iGVt_bbSMa_ZgncfRC6k5");

    //创建上传对象
    UploadManager uploadManager =new UploadManager(new com.qiniu.storage.Configuration());

    @PostConstruct
    public void init() {
        try {

            instance = new AipSpeech(qnYunProperties.getAccessKey(), qnYunProperties.getSecretKey(), qnYunProperties.getUrl());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 简单上传，使用默认策略，只需要设置上传的空间名就可以了
     *
     * @param
     * @return
     */
//    public String getUpToken(String fileName) {
//        //return auth.uploadToken(bucketname);
//        //<bucket>:<key>，表示只允许用户上传指定key的文件。在这种格式下文件默认允许“修改”，已存在同名资源则会被本次覆盖。
//        //如果希望只能上传指定key的文件，并且不允许修改，那么可以将下面的 insertOnly 属性值设为 1。
//        //第三个参数是token的过期时间
//        return auth.uploadToken(qnYunProperties.getName(), fileName, 3600, new StringMap().put("insertOnly", 0));
//    }
    //简单上传，使用默认策略，只需要设置上传的空间名就可以了
    public String getUpToken(){
        return auth.uploadToken(qnYunProperties.getName());
    }

    /**
     * 普通上传
     *
     * @param filePath 文件路径
     * @param fileName 文件上传至七牛云空间的名称
     * @throws
     */
    public String upload(String filePath, String fileName) {
        try {
            //调用put方法上传
            com.qiniu.http.Response res = uploadManager.put(filePath, fileName, getUpToken());
            //解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(res.bodyString(), DefaultPutRet.class);
            //打印返回的信息
            System.out.println("MP3可播放的地址：" + qnYunProperties.getUrl()+ putRet.key);
            return qnYunProperties.getUrl()+ putRet.key;
        } catch (QiniuException e) {
            com.qiniu.http.Response r = e.response;
            // 请求失败时打印的异常的信息
            System.out.println(r.toString());
            try {
                //响应的文本信息
                System.out.println(r.bodyString());
            } catch (QiniuException e1) {
                //ignore
                e.printStackTrace();
            }
        }
        return null;
    }



}
